use std::sync::Arc;
use crate::consumer::{ConsumeMetrics, ConsumeTraces, ConsumeLogs};

/// Processor trait for transforming traces data before passing to downstream consumer.
pub trait TracesProcessor: Send + Sync {
    fn wrap(&self, next: Arc<dyn ConsumeTraces + Send + Sync + 'static>) -> Arc<dyn ConsumeTraces + Send + Sync + 'static>;
}

/// Processor trait for transforming metrics data before passing to downstream consumer.
pub trait MetricsProcessor: Send + Sync {
    fn wrap(&self, next: Arc<dyn ConsumeMetrics + Send + Sync + 'static>) -> Arc<dyn ConsumeMetrics + Send + Sync + 'static>;
}

/// Processor trait for transforming logs data before passing to downstream consumer.
pub trait LogsProcessor: Send + Sync {
    fn wrap(&self, next: Arc<dyn ConsumeLogs + Send + Sync + 'static>) -> Arc<dyn ConsumeLogs + Send + Sync + 'static>;
}
